/**
 */
package de.thwildau.tm.moses.avro.avdl.provider;

import de.thwildau.tm.moses.avro.avdl.util.AvdlAdapterFactory;

import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;

import org.eclipse.emf.edit.provider.ChangeNotifier;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IChangeNotifier;
import org.eclipse.emf.edit.provider.IDisposable;
import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.provider.IItemPropertySource;
import org.eclipse.emf.edit.provider.INotifyChangedListener;
import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

/**
 * This is the factory that is used to provide the interfaces needed to support Viewers.
 * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
 * The adapters also support Eclipse property sheets.
 * Note that most of the adapters are shared among multiple instances.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public class AvdlItemProviderAdapterFactory extends AvdlAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable
{
  /**
   * This keeps track of the root adapter factory that delegates to this adapter factory.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ComposedAdapterFactory parentAdapterFactory;

  /**
   * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected IChangeNotifier changeNotifier = new ChangeNotifier();

  /**
   * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected Collection<Object> supportedTypes = new ArrayList<Object>();

  /**
   * This constructs an instance.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public AvdlItemProviderAdapterFactory()
  {
    supportedTypes.add(IEditingDomainItemProvider.class);
    supportedTypes.add(IStructuredItemContentProvider.class);
    supportedTypes.add(ITreeItemContentProvider.class);
    supportedTypes.add(IItemLabelProvider.class);
    supportedTypes.add(IItemPropertySource.class);
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.AvroIdl} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected AvroIdlItemProvider avroIdlItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.AvroIdl}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createAvroIdlAdapter()
  {
    if (avroIdlItemProvider == null)
    {
      avroIdlItemProvider = new AvroIdlItemProvider(this);
    }

    return avroIdlItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Protocol} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ProtocolItemProvider protocolItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Protocol}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createProtocolAdapter()
  {
    if (protocolItemProvider == null)
    {
      protocolItemProvider = new ProtocolItemProvider(this);
    }

    return protocolItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Definitions} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected DefinitionsItemProvider definitionsItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Definitions}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createDefinitionsAdapter()
  {
    if (definitionsItemProvider == null)
    {
      definitionsItemProvider = new DefinitionsItemProvider(this);
    }

    return definitionsItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Error} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ErrorItemProvider errorItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Error}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createErrorAdapter()
  {
    if (errorItemProvider == null)
    {
      errorItemProvider = new ErrorItemProvider(this);
    }

    return errorItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Record} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected RecordItemProvider recordItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Record}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createRecordAdapter()
  {
    if (recordItemProvider == null)
    {
      recordItemProvider = new RecordItemProvider(this);
    }

    return recordItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Field} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected FieldItemProvider fieldItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Field}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createFieldAdapter()
  {
    if (fieldItemProvider == null)
    {
      fieldItemProvider = new FieldItemProvider(this);
    }

    return fieldItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Enum} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected EnumItemProvider enumItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Enum}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createEnumAdapter()
  {
    if (enumItemProvider == null)
    {
      enumItemProvider = new EnumItemProvider(this);
    }

    return enumItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.EnumFields} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected EnumFieldsItemProvider enumFieldsItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.EnumFields}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createEnumFieldsAdapter()
  {
    if (enumFieldsItemProvider == null)
    {
      enumFieldsItemProvider = new EnumFieldsItemProvider(this);
    }

    return enumFieldsItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.FixedLengthField} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected FixedLengthFieldItemProvider fixedLengthFieldItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.FixedLengthField}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createFixedLengthFieldAdapter()
  {
    if (fixedLengthFieldItemProvider == null)
    {
      fixedLengthFieldItemProvider = new FixedLengthFieldItemProvider(this);
    }

    return fixedLengthFieldItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Imports} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ImportsItemProvider importsItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Imports}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createImportsAdapter()
  {
    if (importsItemProvider == null)
    {
      importsItemProvider = new ImportsItemProvider(this);
    }

    return importsItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.RPCMessage} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected RPCMessageItemProvider rpcMessageItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.RPCMessage}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createRPCMessageAdapter()
  {
    if (rpcMessageItemProvider == null)
    {
      rpcMessageItemProvider = new RPCMessageItemProvider(this);
    }

    return rpcMessageItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Name} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected NameItemProvider nameItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Name}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createNameAdapter()
  {
    if (nameItemProvider == null)
    {
      nameItemProvider = new NameItemProvider(this);
    }

    return nameItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.ReturnType} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ReturnTypeItemProvider returnTypeItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.ReturnType}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createReturnTypeAdapter()
  {
    if (returnTypeItemProvider == null)
    {
      returnTypeItemProvider = new ReturnTypeItemProvider(this);
    }

    return returnTypeItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Throws} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ThrowsItemProvider throwsItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Throws}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createThrowsAdapter()
  {
    if (throwsItemProvider == null)
    {
      throwsItemProvider = new ThrowsItemProvider(this);
    }

    return throwsItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Argument} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ArgumentItemProvider argumentItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Argument}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createArgumentAdapter()
  {
    if (argumentItemProvider == null)
    {
      argumentItemProvider = new ArgumentItemProvider(this);
    }

    return argumentItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.Annotation} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected AnnotationItemProvider annotationItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.Annotation}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createAnnotationAdapter()
  {
    if (annotationItemProvider == null)
    {
      annotationItemProvider = new AnnotationItemProvider(this);
    }

    return annotationItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.AliasAnnotation} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected AliasAnnotationItemProvider aliasAnnotationItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.AliasAnnotation}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createAliasAnnotationAdapter()
  {
    if (aliasAnnotationItemProvider == null)
    {
      aliasAnnotationItemProvider = new AliasAnnotationItemProvider(this);
    }

    return aliasAnnotationItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.OrderAnnotation} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected OrderAnnotationItemProvider orderAnnotationItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.OrderAnnotation}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createOrderAnnotationAdapter()
  {
    if (orderAnnotationItemProvider == null)
    {
      orderAnnotationItemProvider = new OrderAnnotationItemProvider(this);
    }

    return orderAnnotationItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.NamespaceAnnotation} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected NamespaceAnnotationItemProvider namespaceAnnotationItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.NamespaceAnnotation}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createNamespaceAnnotationAdapter()
  {
    if (namespaceAnnotationItemProvider == null)
    {
      namespaceAnnotationItemProvider = new NamespaceAnnotationItemProvider(this);
    }

    return namespaceAnnotationItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.JavaclassAnnotation} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected JavaclassAnnotationItemProvider javaclassAnnotationItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.JavaclassAnnotation}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createJavaclassAnnotationAdapter()
  {
    if (javaclassAnnotationItemProvider == null)
    {
      javaclassAnnotationItemProvider = new JavaclassAnnotationItemProvider(this);
    }

    return javaclassAnnotationItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.DefType} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected DefTypeItemProvider defTypeItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.DefType}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createDefTypeAdapter()
  {
    if (defTypeItemProvider == null)
    {
      defTypeItemProvider = new DefTypeItemProvider(this);
    }

    return defTypeItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.BaseTypeRef} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected BaseTypeRefItemProvider baseTypeRefItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.BaseTypeRef}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createBaseTypeRefAdapter()
  {
    if (baseTypeRefItemProvider == null)
    {
      baseTypeRefItemProvider = new BaseTypeRefItemProvider(this);
    }

    return baseTypeRefItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.ComplexTypeRef} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ComplexTypeRefItemProvider complexTypeRefItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.ComplexTypeRef}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createComplexTypeRefAdapter()
  {
    if (complexTypeRefItemProvider == null)
    {
      complexTypeRefItemProvider = new ComplexTypeRefItemProvider(this);
    }

    return complexTypeRefItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.NumberRef} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected NumberRefItemProvider numberRefItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.NumberRef}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createNumberRefAdapter()
  {
    if (numberRefItemProvider == null)
    {
      numberRefItemProvider = new NumberRefItemProvider(this);
    }

    return numberRefItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.IntRef} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected IntRefItemProvider intRefItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.IntRef}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createIntRefAdapter()
  {
    if (intRefItemProvider == null)
    {
      intRefItemProvider = new IntRefItemProvider(this);
    }

    return intRefItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.HexRef} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected HexRefItemProvider hexRefItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.HexRef}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createHexRefAdapter()
  {
    if (hexRefItemProvider == null)
    {
      hexRefItemProvider = new HexRefItemProvider(this);
    }

    return hexRefItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.DoubleRef} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected DoubleRefItemProvider doubleRefItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.DoubleRef}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createDoubleRefAdapter()
  {
    if (doubleRefItemProvider == null)
    {
      doubleRefItemProvider = new DoubleRefItemProvider(this);
    }

    return doubleRefItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.BooleanRef} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected BooleanRefItemProvider booleanRefItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.BooleanRef}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createBooleanRefAdapter()
  {
    if (booleanRefItemProvider == null)
    {
      booleanRefItemProvider = new BooleanRefItemProvider(this);
    }

    return booleanRefItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.StringRef} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected StringRefItemProvider stringRefItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.StringRef}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createStringRefAdapter()
  {
    if (stringRefItemProvider == null)
    {
      stringRefItemProvider = new StringRefItemProvider(this);
    }

    return stringRefItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.ImportTypeRef} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ImportTypeRefItemProvider importTypeRefItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.ImportTypeRef}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createImportTypeRefAdapter()
  {
    if (importTypeRefItemProvider == null)
    {
      importTypeRefItemProvider = new ImportTypeRefItemProvider(this);
    }

    return importTypeRefItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.FieldType} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected FieldTypeItemProvider fieldTypeItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.FieldType}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createFieldTypeAdapter()
  {
    if (fieldTypeItemProvider == null)
    {
      fieldTypeItemProvider = new FieldTypeItemProvider(this);
    }

    return fieldTypeItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.ArrayType} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ArrayTypeItemProvider arrayTypeItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.ArrayType}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createArrayTypeAdapter()
  {
    if (arrayTypeItemProvider == null)
    {
      arrayTypeItemProvider = new ArrayTypeItemProvider(this);
    }

    return arrayTypeItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.MapType} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected MapTypeItemProvider mapTypeItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.MapType}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createMapTypeAdapter()
  {
    if (mapTypeItemProvider == null)
    {
      mapTypeItemProvider = new MapTypeItemProvider(this);
    }

    return mapTypeItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.UnionType} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected UnionTypeItemProvider unionTypeItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.UnionType}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createUnionTypeAdapter()
  {
    if (unionTypeItemProvider == null)
    {
      unionTypeItemProvider = new UnionTypeItemProvider(this);
    }

    return unionTypeItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.UnionFieldType} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected UnionFieldTypeItemProvider unionFieldTypeItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.UnionFieldType}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createUnionFieldTypeAdapter()
  {
    if (unionFieldTypeItemProvider == null)
    {
      unionFieldTypeItemProvider = new UnionFieldTypeItemProvider(this);
    }

    return unionFieldTypeItemProvider;
  }

  /**
   * This keeps track of the one adapter used for all {@link de.thwildau.tm.moses.avro.avdl.ConstValue} instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ConstValueItemProvider constValueItemProvider;

  /**
   * This creates an adapter for a {@link de.thwildau.tm.moses.avro.avdl.ConstValue}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter createConstValueAdapter()
  {
    if (constValueItemProvider == null)
    {
      constValueItemProvider = new ConstValueItemProvider(this);
    }

    return constValueItemProvider;
  }

  /**
   * This returns the root adapter factory that contains this factory.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public ComposeableAdapterFactory getRootAdapterFactory()
  {
    return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
  }

  /**
   * This sets the composed adapter factory that contains this factory.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory)
  {
    this.parentAdapterFactory = parentAdapterFactory;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public boolean isFactoryForType(Object type)
  {
    return supportedTypes.contains(type) || super.isFactoryForType(type);
  }

  /**
   * This implementation substitutes the factory itself as the key for the adapter.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Adapter adapt(Notifier notifier, Object type)
  {
    return super.adapt(notifier, this);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Object adapt(Object object, Object type)
  {
    if (isFactoryForType(type))
    {
      Object adapter = super.adapt(object, type);
      if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter)))
      {
        return adapter;
      }
    }

    return null;
  }

  /**
   * This adds a listener.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void addListener(INotifyChangedListener notifyChangedListener)
  {
    changeNotifier.addListener(notifyChangedListener);
  }

  /**
   * This removes a listener.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void removeListener(INotifyChangedListener notifyChangedListener)
  {
    changeNotifier.removeListener(notifyChangedListener);
  }

  /**
   * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void fireNotifyChanged(Notification notification)
  {
    changeNotifier.fireNotifyChanged(notification);

    if (parentAdapterFactory != null)
    {
      parentAdapterFactory.fireNotifyChanged(notification);
    }
  }

  /**
   * This disposes all of the item providers created by this factory. 
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void dispose()
  {
    if (avroIdlItemProvider != null) avroIdlItemProvider.dispose();
    if (protocolItemProvider != null) protocolItemProvider.dispose();
    if (definitionsItemProvider != null) definitionsItemProvider.dispose();
    if (errorItemProvider != null) errorItemProvider.dispose();
    if (recordItemProvider != null) recordItemProvider.dispose();
    if (fieldItemProvider != null) fieldItemProvider.dispose();
    if (enumItemProvider != null) enumItemProvider.dispose();
    if (enumFieldsItemProvider != null) enumFieldsItemProvider.dispose();
    if (fixedLengthFieldItemProvider != null) fixedLengthFieldItemProvider.dispose();
    if (importsItemProvider != null) importsItemProvider.dispose();
    if (rpcMessageItemProvider != null) rpcMessageItemProvider.dispose();
    if (nameItemProvider != null) nameItemProvider.dispose();
    if (returnTypeItemProvider != null) returnTypeItemProvider.dispose();
    if (throwsItemProvider != null) throwsItemProvider.dispose();
    if (argumentItemProvider != null) argumentItemProvider.dispose();
    if (annotationItemProvider != null) annotationItemProvider.dispose();
    if (aliasAnnotationItemProvider != null) aliasAnnotationItemProvider.dispose();
    if (orderAnnotationItemProvider != null) orderAnnotationItemProvider.dispose();
    if (namespaceAnnotationItemProvider != null) namespaceAnnotationItemProvider.dispose();
    if (javaclassAnnotationItemProvider != null) javaclassAnnotationItemProvider.dispose();
    if (defTypeItemProvider != null) defTypeItemProvider.dispose();
    if (baseTypeRefItemProvider != null) baseTypeRefItemProvider.dispose();
    if (complexTypeRefItemProvider != null) complexTypeRefItemProvider.dispose();
    if (numberRefItemProvider != null) numberRefItemProvider.dispose();
    if (intRefItemProvider != null) intRefItemProvider.dispose();
    if (hexRefItemProvider != null) hexRefItemProvider.dispose();
    if (doubleRefItemProvider != null) doubleRefItemProvider.dispose();
    if (booleanRefItemProvider != null) booleanRefItemProvider.dispose();
    if (stringRefItemProvider != null) stringRefItemProvider.dispose();
    if (importTypeRefItemProvider != null) importTypeRefItemProvider.dispose();
    if (fieldTypeItemProvider != null) fieldTypeItemProvider.dispose();
    if (arrayTypeItemProvider != null) arrayTypeItemProvider.dispose();
    if (mapTypeItemProvider != null) mapTypeItemProvider.dispose();
    if (unionTypeItemProvider != null) unionTypeItemProvider.dispose();
    if (unionFieldTypeItemProvider != null) unionFieldTypeItemProvider.dispose();
    if (constValueItemProvider != null) constValueItemProvider.dispose();
  }

}
